//封装JS的Date，提供日期相关的服务
export abstract class MyDate {
  public static WEEKDAYS:string[] = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']

  //今天
  public static today():string {
    return MyDate.date2yyyyMMDD(new Date())
  }

  //返回该周的七天
  public static daysInTheSameWeek(date:string):string[] {
    const ret:string[] = []
    const date_: Date = new Date(date)
    const day: number = date_.getDay() //该日是本周第几天
    for(var i = 0; i < 7; ++i) { //本周的七天
      var date_i:Date = new Date(date_.getFullYear(), date_.getMonth(), date_.getDate() - day + i)
      ret.push(MyDate.date2yyyyMMDD(date_i))
    }
    return ret
  }

  //返回该天的年份
  public static getYear(date: string):number {
    return new Date(date).getFullYear()
  }

  //返回该天是第几月（一月=1，二月=2，... 十二月=12）
  public static getMonth(date: string):number {
    return new Date(date).getMonth() + 1
  }

  //返回该天是该月的第几天
  public static getDate(date: string):number {
    return new Date(date).getDate()
  }

  //返回该天是该周的第几天（周天 = 0， 周一 = 1， ... 周六 = 6）
  public static getDay(date: string):number {
    return new Date(date).getDay()
  }

  //Date转日期字符串
  public static date2yyyyMMDD(date:Date):string {
    const DD = String(date.getDate()).padStart(2, '0'); // 获取日
    const MM = String(date.getMonth() + 1).padStart(2, '0'); //获取月份，1 月为 0
    const yyyy = String(date.getFullYear()).padStart(4, '0'); // 获取年
    return yyyy + '-' + MM + '-' + DD;
  }

  //日期增加一个偏移量
  public static dateWithOffset(date:string, offset:number):string {
    const date_:Date = new Date(date)
    const dateWithAnOffset = new Date(date_.getFullYear(), date_.getMonth(), date_.getDate() + offset)
    return MyDate.date2yyyyMMDD(dateWithAnOffset)
  }
}